
/**
 * 
 * @author Grupo 5R
 *
 *classe que representa um Usuario
 */
public class Usuario {

	String nome;
	String descricao;
	String email;
	final String separador = System.getProperty("line.separator");
	
	/**
	 * construtor default para um Usuario
	 * inicia o Usuario com nome = "", descricao e email vazios.
	 */
	public Usuario() {
		this.nome = "";
		this.descricao = "";
		this.email = "";
	}

	/**
	 * metodo que retorna o nome do Usuario
	 * @return
	 * 		retorna uma String que e o nome daquele Usuario
	 */
	public String getNome() {
		return nome;
	}

	/**
	 * metodo que retorna a descricao do Usuario
	 * @return
	 * 		retorna uma String que e a descricao daquele Usuario
	 */
	public String getDescricao() {
		return descricao;
	}

	/**
	 * metodo que retorna o email do Usuario
	 * @return
	 * 		retorna uma String que e o email daquele Usuario
	 */
	public String getEmail() {
		return email;
	}

	/**
	 * metodo que altera o nome do Usuario
	 * @param nome
	 * 		recebe uma String que representara o novo nome do Usuario
	 */
	public void setNome(String nome) throws Exception{
		if(nome == null)
			throw new Exception("nome nulo");
		this.nome = nome;
	}

	/**
	 * metodo que altera a descricao do Usuario
	 * @param descricao
	 * 		recebe uma String que representara a nova descicao do Usuario
	 */
	public void setDescricao(String descricao) throws Exception{
		if(descricao == null)
			throw new Exception("descricao nula");
		this.descricao = descricao;
	}
	
	/**
	 * metodo que altera o email do Usuario
	 * @param email
	 * 		recebe uma String que representara o novo email do Usuario
	 */
	public void setEmail(String email) throws Exception{
		if(email == null)
			throw new Exception("email nulo");
		this.email = email;
	}
	
	/**
	 * metodo que retorna o Usuario em forma de String
	 * @return
	 * 		retorna uma String que representa o Usuario da seguinte forma:
	 * 			retorna o nome do usuario
	 * 			se a descricao for diferente de "" retorna ela
	 * 			se o email for diferente de "" retorna ele
	 * 			o nome descricao e email sao separadas por quebras de linhas e especificados
	 */
	@Override
	public String toString(){
		String usuarioEmString = "Usuario: "+ getNome();
		if(getDescricao() != "")
			usuarioEmString += separador + "Descricao: " + getDescricao();
		if(getEmail() != "")
			usuarioEmString += separador + "Email: " + getEmail();
		return usuarioEmString;
	}
	/**
	 * metodo que verifica se um Usuario e igual a outro Usuario
	 * um Usuario e igual a outro Usuario se somente se o nome a descricao e o email do primeiro Usuario forem iguais ao nome descricao e email do segundo Usuario respectivamente
	 * @return
	 * 		retorna o boolean true se forem iguais
	 * 		retorna O boolean false se forem diferentes	
	 * 
	 */
	@Override
	public boolean equals(Object obj) {
		if(!(obj instanceof Usuario))
			return false;
		Usuario usuario = (Usuario) obj;
		if(getNome().equals(usuario.getNome()) && getDescricao().equals(usuario.getDescricao()) && getEmail().equals(usuario.getEmail()))
			return true;
		return false;
	}
	
	
}
